home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
cpp_libs
/
answrbok
/
5_5.lha
/
5_5
/
5_5E.h
< prev
next >
Wrap
C/C++ Source or Header
|
1993-08-08
|
2KB
|
143 lines
* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
* The C++ Answer Book */
* Tony Hansen */
* All rights reserved. */
truct tree
tree() { }
virtual ~tree() { }
virtual int eval() { return 0; }
virtual void print() { }
;
truct unary_op : tree
tree *left;
unary_op() { left = 0; }
~unary_op() { delete left; }
;
truct binary_op : unary_op
tree *right;
binary_op() { right = 0; }
~binary_op() { delete right; }
;
truct number_leaf : tree
int value;
number_leaf(int v) { value = v; }
int eval() { return value; }
void print() { cout << "( " << value << " ) "; }
;
truct plus_op : binary_op
int eval()
{ return left->eval() + right->eval(); }
void print()
{
cout << "( ";
left->print();
cout << "+ ";
right->print();
cout << ") ";
}
;
truct unary_minus_op : unary_op
int eval()
{ return - left->eval(); }
void print()
{
cout << "( - ";
left->print();
}
;
truct binary_minus_op : binary_op
int eval()
{ return left->eval() - right->eval(); }
void print()
{
cout << "( ";
left->print();
cout << "- ";
right->print();
cout << ") ";
}
;
truct mult_op : binary_op
int eval()
{ return left->eval() * right->eval(); }
void print()
{
cout << "( ";
left->print();
cout << "* ";
right->print();
cout << ") ";
}
;
truct div_op : binary_op
int eval()
{
int l = left->eval();
int r = right->eval();
return (r != 0) ?
(l / r) :
error("division by 0");
}
void print()
{
cout << "( ";
left->print();
cout << "/ ";
right->print();
cout << ") ";
}
;
truct lparen_op : unary_op
int eval()
{ return left->eval(); }
void print()
{
cout << "( ";
left->print();
cout << ") ";
}
;
lass expr
tree *head;
int evaluated, value;
ublic:
expr(char*);
~expr() { delete head; }
int eval();
void print();
;
truct token
exprtype type;
int value;
;